GNU/Linux >> Linux の 問題 >  >> Linux

パスが/で終わっていないときに/でパス入力が壊れることを期待するBashスクリプトを修正しますか?

私はこのコードを持っています:

for file in "[email protected]"*png; do
  echo "$file"
done

/root/のように/で終わるパスを指定した場合にのみ機能します 。

このような状況で、スクリプトを壊さずに/をパス入力に追加する正しい方法は何でしょうか?

最後に/を付けずにパス入力を指定すると、これが実行されます:

File: /root*png

「[emailprotected]」/*pngのファイルのfor file in "[email protected]"/*png; do /root/test/を入力します 動作しますが、結果は見苦しいです:

File: //eadn-wc01-5196795.nxedge.io/root/test//sample2.png

承認された回答:

ilkkachuは私の答えの大きな欠陥を指摘し、彼の中でそれを修正したので、彼にふさわしい信用を与えてください。しかし、私は別の解決策を考え出しました:

#!/bin/bash

for dir in "[email protected]"; do
        find "$dir" -type f -name '*png' -exec readlink -f {}  \;
done

$ ll
total 6
-rwxr-xr-x 1 root root 104 Jan  7 14:03 script.sh*
drwxr-xr-x 2 root root   3 Jan  7 04:21 test1/
drwxr-xr-x 2 root root   3 Jan  7 04:21 test2/
drwxr-xr-x 2 root root   3 Jan  7 04:21 test3/

$ for n in {1..3}; do ll "test$n"; done
total 1
-rw-r--r-- 1 root root 0 Jan  7 04:21 testfile.png
total 1
-rw-r--r-- 1 root root 0 Jan  7 04:21 testfile.png
total 1
-rw-r--r-- 1 root root 0 Jan  7 04:21 testfile.png

$ ./script.sh test1 test2/ test3
//eadn-wc01-5196795.nxedge.io/root/temp/test1/testfile.png
//eadn-wc01-5196795.nxedge.io/root/temp/test2/testfile.png
//eadn-wc01-5196795.nxedge.io/root/temp/test3/testfile.png

元のソリューション

for file in "${@%/}/"*png; do
  echo "$file"
done

$ {@%/}は、パラメータの末尾から/をトリミングしてから、/outsideでパラメータを追加し直します。またはパラメータがないパラメータに追加します。


Linux
  1. rootアカウントでのログインを無効にする

  2. Bashスクリプトがエイリアスを認識しないのはなぜですか?

  3. 〜/ .bash_profileが機能しないのはなぜですか?

  1. シェルスクリプトの「sudoSu」がスクリプトの残りの部分をルートとして実行しないのはなぜですか?

  2. `set -e`を使用したBashスクリプトは`…&&…`コマンドで停止しませんか?

  3. Bashスクリプトでは、Continueコマンドは埋め込みループでどのように機能しますか?

  1. bash スクリプトが .NET でソースされたときに、インストールされているディレクトリをどのように知ることができますか。オペレーター?

  2. パスに bash スクリプトを追加する

  3. Bash の「test」コマンドでの「&&」と「&」の比較