سؤال

لقد واجهت مشكلة مزعجة تحدث على PWD متغير عندما يتضمن المسار الحالي مساحة. رمزتي تبدو مثل هذا إلى حد ما:

mycommand |sed -E '  
 s|mystuff|replacement| ;  
 s|'$(pwd)'|replacement| ;  
 '

هذا يعمل بشكل رائع ، ما لم يكن المسار الحالي يحتوي على حرف فضاء. إذا حدث، $(pwd) يتم توسيعه إلى

'mypath/with space'
بدلا من مجرد
mypath/with space

هذا يجعل تعبير SED يفسد (بسبب الاقتباسات الإضافية):

sed: 1: "s|mypath/with": unterminated substitute pattern

لقد لاحظت أنه لا يساعد في توسيع عدد الأشخاص ذوي الإعاقة مثل هذا: ${PWD//\'/}.

أي أفكار حول كيفية حل هذا؟

هل كانت مفيدة؟

المحلول

استبدل عروض أسعار واحدة من عروض أسعار مزدوجة واستبدل اقتباسات مع عوامل معالجة حول PWD:

mycommand | sed -E "
 s|mystuff|replacement| ;
 s|`pwd`|replacement| ;
"

عروض الأسعار المزدوجة تسمح بتوسيع المتغيرات والأوامر المربعة.

نصائح أخرى

ماذا يحدث إذا استبدلت

'$(pwd)'

مع

'"$(pwd)"'

سيبدو هكذا: ثم:

mycommand | sed -E '  
 s|mystuff|replacement| ;  
 s|'"$(pwd)"'|replacement| ;  
 '
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top